/**
 @file socket_interface.h
 @brief Funciones para el manejo de sockets del servicio de intercambio de mensajes.
 @date   06/12/2012
 @version v.0.9
 @author Julian Ovalle
 julianovalle@ula.ve
 */

#ifndef SOCKET_INTERFACE_H_
#define SOCKET_INTERFACE_H_

#include <sys/types.h>
#include <sys/socket.h>

//#define SOCK_INTERFACE_DEBUG

/*!
 @brief Crea, enlaza y activa la escucha del socket de atención de peticiones del servicio de intercambio de mensajes.
 @param myName Estructura que almacenará la dirección del socket.
 @return 0 en caso de exito. -1 en caso de error.
 */
int openSocket(struct sockaddr_in* myName);

/*!
 @brief Envia el contenido de *data a través del socket dado.
 @param sfd descriptor del socket.
 @param *data Apuntador a la data a enviar.
 @param size tamaño de la data a enviar.
 @param addr contenedor de la dirección de destino.
 @param addrlen tamaño del contenedor de la dirección de destino.
 @param timeout_s tiempo máximo de espera en segundos.
 @param timeout_ms tiempo máximo de espera en milisegundos.
 @return Número de bytes enviados, -2 en caso de error, -1 en caso de timeout.
 */
int socketSend(int sfd, const void* data, size_t size, struct sockaddr* addr,
        socklen_t addrlen, int timeout_s, int timeout_ms);

/*!
 @brief Almacena en *data los size bytes recibidos desde el socket dado.
 @param sfd descriptor del socket.
 @param *data Apuntador a la data recibida.
 @param size tamaño de la data a recibir.
 @param addr contenedor de la dirección de origen.
 @param addrlen tamaño del contenedor de la dirección de origen.
 @param timeout_s tiempo máximo de espera en segundos.
 @param timeout_ms tiempo máximo de espera en milisegundos.
 @return Número de bytes leidos, -2 en caso de error, -1 en caso de timeout.
 */
int socketReceive(int sfd, const void* buf, size_t size, struct sockaddr* addr,
        socklen_t addrlen, int timeout_s, int timeout_ms);



#endif /* SOCKET_INTERFACE_H_ */
